package interfazgrafica;

import gestionusuarios.Administrador;
import gestionusuarios.Personas;
import gestionusuarios.Usuario;
import java.util.ArrayList;
import java.util.Iterator;
import java.io.*;
import java.util.StringTokenizer;

/**
 * Clase que se encarga de lanzar la aplicación.
 * @author Lauaa
 */
public class Aplicacion {
    
    static ArrayList<Personas> _personas = new ArrayList<Personas>();//array que contiene los usuarios y contraseñas.
    final static String UsuariosFile ="./src/interfazgrafica/resources/Usuarios";//cadena que contiene la ruta de datos del archivo de usuarios y contraseñas.
    
    public static void main(String args[]) {
        inicializar();
        VentanaPrincipal.main(args);//Abre la ventana principal.
    }

    /**
     * Metodo para inicializar la gestion de usuarios y contraseñas.
     */
    public static void inicializar(){ //Gestiona el archivo de los usuarios y contraseñas.
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        try {
         // Apertura del fichero y creacion de BufferedReader para poder
         // hacer una lectura comoda (disponer del metodo readLine()).
         archivo = new File (UsuariosFile);
         fr = new FileReader (archivo);
         br = new BufferedReader(fr);

         // Lectura del fichero
         String linea;
         while((linea=br.readLine())!=null){
            StringTokenizer tokens = new StringTokenizer(linea);
                String tipo = tokens.nextToken();
                if(tipo.compareTo("administrador") == 0){
                    String usuario = tokens.nextToken();
                    String contraseña = tokens.nextToken();
                    _personas.add(new Administrador(usuario, contraseña));
                }
                if(tipo.compareTo("usuario") == 0){
                    String usuario = tokens.nextToken();
                    String contraseña = tokens.nextToken();
                    _personas.add(new Usuario(usuario, contraseña));
                }
         }
      }
      catch(Exception e){
         e.printStackTrace();
      }finally{
         // En el finally cerramos el fichero, para asegurarnos
         // que se cierra tanto si todo va bien como si salta
         // una excepcion.
         try{
            if( null != fr ){
               fr.close();
            }
         }catch (Exception e2){
            e2.printStackTrace();
         }
      }
    }

    /**
     * Metodo para averiguar el rol de una persona.
     * @param usuario
     * @param contraseña
     * @return cadena con el rol usuario o administrador o vacio si no encontro nada.
     */
    public static String comprobar(String usuario, String contraseña){

        String rol = "";
        Iterator i = _personas.listIterator();
        while(i.hasNext()){
            Personas p = (Personas) i.next();
            if(usuario.compareTo(p.getUsuario()) == 0){
                if(contraseña.compareTo(p.getContraseña()) == 0){
                    rol = p.getRol();
                }
            }
        }
        return rol;
    }
    /**
     * Metodo para buscar una persona.
     * @param usuario
     * @param contraseña
     * @return la persona que se corresponde con ese usuario y contraseña.
     */
    public static Personas buscarPersonas(String usuario, String contraseña){
        Personas persona = null;
        Iterator i = _personas.listIterator();
        while(i.hasNext()){
            Personas p = (Personas) i.next();
            if(usuario.compareTo(p.getUsuario()) == 0){
                if(contraseña.compareTo(p.getContraseña()) == 0){
                    persona = p;
                }
            }
        }
        return persona;
    }

    /**
     * Metodo para cerrar el archivo y guardar los usuarios y contraseñas.
     */
    public static void finalizar(){
        FileWriter fichero = null;
            PrintWriter pw = null;
            try{
                fichero = new FileWriter(UsuariosFile);
                pw = new PrintWriter(fichero);
                Personas persona = null;
                Iterator i = _personas.listIterator();
                while(i.hasNext()){
                    Personas p = (Personas) i.next();
                    pw.println(p.getRol() +" "+ p.getUsuario() +" "+ p.getContraseña());
                }

            } catch (Exception e) {
                e.printStackTrace();
                } finally {
                try {
                // Nuevamente aprovechamos el finally para
                // asegurarnos que se cierra el fichero.
                if (null != fichero)
                fichero.close();
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
    }

    /**
     * Metodo para acceder a las personas.
     * @return arrayList de personas
     */
    public static ArrayList<Personas> getPersonas(){
        return _personas;
    }

}
